home *** CD-ROM | disk | FTP | other *** search
/ Clickx 47 / Clickx 47.iso / assets / software / Miro_Installer.exe / xulrunner / python / test / playlisttest.py < prev    next >
Encoding:
Python Source  |  2008-01-10  |  9.5 KB  |  222 lines

  1. from feed import Feed
  2. from feedparser import FeedParserDict
  3. from item import Item
  4. from playlist import SavedPlaylist
  5. from folder import PlaylistFolder
  6. import app
  7. import views
  8. import tabs
  9. from test.framework import EventLoopTest
  10.  
  11. class PlaylistTestBase(EventLoopTest):
  12.     def setUp(self):
  13.         EventLoopTest.setUp(self)
  14.         self.feed = Feed(u"http://feed.uk")
  15.         self.i1 = Item(FeedParserDict({'title': u'item1'}),
  16.                        feed_id=self.feed.id)
  17.         self.i2 = Item(FeedParserDict({'title': u'item2'}),
  18.                        feed_id=self.feed.id)
  19.         self.i3 = Item(FeedParserDict({'title': u'item3'}),
  20.                        feed_id=self.feed.id)
  21.         self.i4 = Item(FeedParserDict({'title': u'item4'}),
  22.                        feed_id=self.feed.id)
  23.  
  24.     def checkList(self, playlist, correctOrder):
  25.         realPositions = {}
  26.         i = 0
  27.         for listid, item in zip(playlist.trackedItems.list, correctOrder):
  28.             self.assertEquals(listid, item.getID())
  29.             realPositions[item.getID()] = i
  30.             i += 1
  31.         self.assertEquals(set(playlist.trackedItems.list), 
  32.                 playlist.trackedItems.trackedIDs)
  33.         self.assertEquals(realPositions, playlist.trackedItems.positions)
  34.         self.assertEquals(playlist.getItems(), correctOrder)
  35.  
  36.     def doAppend(self, playlist, objects):
  37.         playlist.handleDNDAppend(set([i.getID() for i in objects]))
  38.  
  39.     def doReorder(self, playlist, anchor, objects):
  40.         playlist.handleDNDReorder(anchor, set([i.getID() for i in objects]))
  41.  
  42. class PlaylistTestCase(PlaylistTestBase):
  43.     def setUp(self):
  44.         PlaylistTestBase.setUp(self)
  45.         self.addCallbacks = []
  46.         self.removeCallbacks = []
  47.  
  48.     def addCallback(self, obj, id):
  49.         self.addCallbacks.append((obj, id))
  50.  
  51.     def removeCallback(self, obj, id):
  52.         self.removeCallbacks.append((obj, id))
  53.  
  54.     def testBasicOperations(self):
  55.         playlist = SavedPlaylist("rocketboom")
  56.         self.assertEquals(playlist.getTitle(), 'rocketboom')
  57.         self.assertEquals(playlist.getItems(), [])
  58.         playlist.addItem(self.i4)
  59.         playlist.addItem(self.i1)
  60.         playlist.addItem(self.i3)
  61.         playlist.addItem(self.i2)
  62.         self.checkList(playlist, [self.i4, self.i1, self.i3, self.i2])
  63.         playlist.addItem(self.i2)
  64.         self.checkList(playlist, [self.i4, self.i1, self.i3, self.i2])
  65.         self.assert_(self.i1.keep)
  66.         self.assert_(self.i2.keep)
  67.         self.assert_(self.i3.keep)
  68.         self.assert_(self.i4.keep)
  69.         playlist.moveItem(self.i2, 1)
  70.         self.checkList(playlist, [self.i4, self.i2, self.i1, self.i3])
  71.         playlist.moveItem(self.i3, 0)
  72.         self.checkList(playlist, [self.i3, self.i4, self.i2, self.i1])
  73.         playlist.moveItem(self.i3, 3)
  74.         self.checkList(playlist, [self.i4, self.i2, self.i1, self.i3])
  75.         playlist.removeItem(self.i2)
  76.         self.checkList(playlist, [self.i4, self.i1, self.i3])
  77.         playlist.removeItem(self.i3)
  78.         self.checkList(playlist, [self.i4, self.i1])
  79.  
  80.     def testInitialList(self):
  81.         initialList = [self.i1, self.i2, self.i3]
  82.         playlist = SavedPlaylist("rocketboom", initialList)
  83.         self.assertEquals(playlist.getTitle(), 'rocketboom')
  84.         self.checkList(playlist, initialList)
  85.  
  86.     def checkCallbacks(self, movedItems):
  87.         correctCallbackList = [(i, i.getID()) for i in movedItems]
  88.         self.assertEquals(self.addCallbacks, correctCallbackList)
  89.         self.assertEquals(self.removeCallbacks, correctCallbackList)
  90.  
  91.     def testCallbacks(self):
  92.         initialList = [self.i1, self.i2, self.i3]
  93.         playlist = SavedPlaylist("rocketboom", initialList)
  94.         playlist.getView().addAddCallback(self.addCallback)
  95.         playlist.getView().addRemoveCallback(self.removeCallback)
  96.         playlist.moveItem(self.i2, 0)
  97.         self.checkCallbacks([self.i2])
  98.         playlist.moveItem(self.i3, 0)
  99.         self.checkCallbacks([self.i2, self.i3])
  100.  
  101.     def testHandleDrop(self):
  102.         playlist = SavedPlaylist("rocketboom")
  103.         self.doAppend(playlist, [self.i1])
  104.         self.checkList(playlist, [self.i1])
  105.         self.doAppend(playlist, [self.i3])
  106.         self.checkList(playlist, [self.i1, self.i3])
  107.         self.doAppend(playlist, [self.i3, self.i4])
  108.         self.checkList(playlist, [self.i1, self.i3, self.i4])
  109.  
  110.     def testMoveSelectionAboveItem(self):
  111.         playlist = SavedPlaylist("rocketboom", [self.i1, self.i2, self.i3,
  112.                 self.i4])
  113.         view = playlist.getView()
  114.         self.doReorder(playlist, self.i3, [self.i1])
  115.         self.checkList(playlist, [self.i2, self.i1, self.i3, self.i4])
  116.         self.doReorder(playlist, None, [self.i1])
  117.         self.checkList(playlist, [self.i2, self.i3, self.i4, self.i1])
  118.         self.doReorder(playlist, self.i2, [self.i1])
  119.         self.checkList(playlist, [self.i1, self.i2, self.i3, self.i4])
  120.         self.doReorder(playlist, self.i1, [self.i2, self.i3, self.i4])
  121.         self.checkList(playlist, [self.i2, self.i3, self.i4, self.i1])
  122.         self.doReorder(playlist, self.i4, [self.i2, self.i1])
  123.         self.checkList(playlist, [self.i3, self.i2, self.i1, self.i4])
  124.         self.doReorder(playlist, None, [self.i1, self.i3])
  125.         self.checkList(playlist, [self.i2, self.i4, self.i3, self.i1])
  126.         self.doReorder(playlist, None, [self.i2, self.i3, self.i4])
  127.         self.checkList(playlist, [self.i1, self.i2, self.i4, self.i3])
  128.  
  129.     def testExpireRemovesItem(self):
  130.         checkList = [self.i1, self.i2, self.i3, self.i4]
  131.         playlist = SavedPlaylist("rocketboom", checkList)
  132.         for i in [self.i1, self.i3, self.i4, self.i2]:
  133.             i.expire()
  134.             checkList.remove(i)
  135.             self.checkList(playlist, checkList)
  136.  
  137. class PlaylistFolderTestCase(PlaylistTestBase):
  138.     def setUp(self):
  139.         PlaylistTestBase.setUp(self)
  140.         self.playlistTabOrder = tabs.TabOrder(u'playlist')
  141.         self.p1 = SavedPlaylist("rocketboom", [self.i1, self.i3])
  142.         self.p2 = SavedPlaylist("telemusicvision", [self.i4, self.i3])
  143.         self.p3 = SavedPlaylist("digg", [self.i1, self.i2, self.i3, self.i4])
  144.         self.folder = PlaylistFolder("My Best Vids")
  145.         self.folder.setExpanded(True)
  146.         self.runPendingIdles() # The TabOrder gets updated in an idle call
  147.  
  148.     def doTabReorder(self, anchorID, items):
  149.         self.playlistTabOrder.handleDNDReorder(anchorID, 
  150.                 set([i.getID() for i in items]))
  151.  
  152.     def doPlaylistRemove(self, playlist, items):
  153.         playlist.handleRemove(set([i.getID() for i in items]))
  154.  
  155.     def testHandleDrop(self):
  156.         self.doAppend(self.folder, [self.p1])
  157.         self.checkList(self.folder, [self.i1, self.i3])
  158.         self.doAppend(self.folder, [self.p2])
  159.         self.checkList(self.folder, [self.i1, self.i3, self.i4])
  160.         self.doAppend(self.folder, [self.p1, self.p2, self.p3])
  161.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  162.  
  163.     def testHandleDropUnexpanded(self):
  164.         self.folder.setExpanded(False)
  165.         selection = app.controller.selection
  166.         selection.selectItem('tablist', self.playlistTabOrder.getView(), 
  167.                 self.p1.getID(), shiftSelect=False, controlSelect=False)
  168.         self.doAppend(self.folder, [self.p1])
  169.         app.controller.selection.tabListSelection
  170.         selectedTabIDs = selection.tabListSelection.currentSelection
  171.         self.assertEquals(selectedTabIDs, set([self.folder.getID()]))
  172.  
  173.     def testExpireRemovesItem(self):
  174.         self.doAppend(self.folder, [self.p1])
  175.         self.checkList(self.folder, [self.i1, self.i3])
  176.         self.i1.expire()
  177.         self.checkList(self.folder, [self.i3])
  178.         self.i3.expire()
  179.         self.checkList(self.folder, [])
  180.  
  181.     def testRemovePlaylistRemovesItem(self):
  182.         for pl in [self.p1, self.p2, self.p3]:
  183.             self.doAppend(self.folder, [pl])
  184.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  185.         self.doTabReorder(None, [self.p3])
  186.         self.checkList(self.folder, [self.i1, self.i3, self.i4])
  187.         self.doTabReorder(None, [self.p2])
  188.         self.checkList(self.folder, [self.i1, self.i3])
  189.         self.doTabReorder(None, [self.p1])
  190.         self.checkList(self.folder, [])
  191.  
  192.     def testReorder(self):
  193.         for pl in [self.p1, self.p2, self.p3]:
  194.             self.doAppend(self.folder, [pl])
  195.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  196.         # reordering the playlist doesn't change the folder
  197.         self.doReorder(self.p1, None, [self.i1])
  198.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  199.         # reordering the folder doesn't change the playlists
  200.         self.doReorder(self.folder, None, [self.i2])
  201.         self.checkList(self.p1, [self.i3, self.i1])
  202.         self.checkList(self.p2, [self.i4, self.i3])
  203.         self.checkList(self.p3, [self.i1, self.i2, self.i3, self.i4])
  204.  
  205.         self.p1 = SavedPlaylist("rocketboom", [self.i1, self.i3])
  206.         self.p2 = SavedPlaylist("telemusicvision", [self.i4, self.i3])
  207.         self.p3 = SavedPlaylist("digg", [self.i1, self.i2, self.i3, self.i4])
  208.  
  209.     def testRemoveItemFromPlaylist(self):
  210.         for pl in [self.p1, self.p2, self.p3]:
  211.             self.doAppend(self.folder, [pl])
  212.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  213.         self.doPlaylistRemove(self.p1, [self.i1])
  214.         self.checkList(self.folder, [self.i1, self.i3, self.i4, self.i2])
  215.         self.doPlaylistRemove(self.p3, [self.i1])
  216.         self.checkList(self.folder, [self.i3, self.i4, self.i2])
  217.  
  218.     def testRemoveFolderRemovesPlaylist(self):
  219.         self.doAppend(self.folder, [self.p1, self.p2, self.p3])
  220.         self.folder.remove()
  221.         self.assertEquals(len(views.playlists), 0)
  222.